# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:张广勤
@Web site: https://www.tunan.wang
@Github:www.github.com
 
@File:myApp.py
@Time:2024/3/5 20:53

@Motto:不积跬步无以至千里，不积小流无以成江海！
"""

import streamlit as st
import pandas as pd
# import numpy as np
# from PIL import Image
# import matplotlib.pyplot as plt
# import time
from cctv_news import news1_1, search_csv1_0, province_counts1_0, key_counts1_0, chinese_brackets_set1_0, xinzen1_0, is_today1_0, find_records_with_numbers1_0, news_detail_md1_2, rili1_0
from datetime import datetime
# import query_mysql1_0
# import raddom_quote
# import random_line1_0
# import csv
# import taichu_gpt1_0
# import openpyxl
# import xlrd


# st.set_page_config(page_title="Tunan",page_icon=r'.\static\favicon.ico')
df = pd.DataFrame({
  'first column': ['新闻联播', '新闻联播专题', '新闻联播每日文字稿', '标题含数字的新闻', '新闻联播csv关键字查找','新闻联播省级名称出现次数','新闻联播年度关键字出现次数'],
  'second column': [15, 16, 17, 18, 19, 20, 21]
})

# df
option = st.sidebar.selectbox(
    'Which number do you like best?',
     df['first column'])

# st.markdown('<p style="text-align:right;">'+raddom_quote.get_random_quote()+'</p>',unsafe_allow_html=True)
# st.markdown('<p style="text-align:right;">'+random_line1_0.random_line("caigentan.md")+'</p>',unsafe_allow_html=True)
'You selected:', option


if option == '新闻联播':
    # 获取前一天的新闻，每次程序执行都需要抓取写入，可以改进
    # 如果前一天的新闻已存在，则不需要再次抓取，写入，真接读取就可以了，可以节约时间。
    # 获取news.md的创建时间，如果是当天，则不需要抓取写入，如果是前一天或更早，则抓取写入。
    # 20241210,修改后，程序当天第一次运行慢，再次运行速度相当快！！！
    file_path = './static/news.md'
    if not is_today1_0.is_today(file_path):
        _, title, link = news1_1.news_yesterday()
        with open(file_path, 'w', encoding='utf-8') as f:
            for i in range(len(title)):
                f.write('<a href="' + link[i] + '" target="_blank">' + title[i] + '</a>' + '\n\n')
    with open(file_path, 'r', encoding='utf-8') as f:
        text1 = f.read()
    st.markdown(text1,unsafe_allow_html=True)


if option =='新闻联播专题':
    # 追加到前一天的新闻
    xinzen1_0.xinzen()
    news_detail_md1_2.detail_xinzen()
    topic = chinese_brackets_set1_0.cctv_news_topic()
    topic.sort()
    df = pd.DataFrame({
        'first_column':topic,
        'second_column':[lambda x : x for x in range(len(topic))]
    })
    option_1 = st.sidebar.selectbox(
        'Which topic do you choice ?',
        df['first_column'])

    'you select:',option_1
    result = search_csv1_0.search_csv_files('./news/', option_1)
    st.write('共找到' + str(len(result)) + '条记录!')
    # item is list
    for item in result:
        st.markdown(item[0] + '&nbsp;' + '<a href="' + item[2] + '" target="_blank">' + item[1] + '</a>' + '\n\n',
                    unsafe_allow_html=True)

if option == '新闻联播每日文字稿':
    rili1_0.news_everyday()
# if option =='标题含数字的新闻':
#     result = find_records_with_numbers1_0.find_records_with_numbers("./news/")
#     st.write('共找到' + str(len(result)) + '条记录!')
#     for item in result:
#         st.markdown(str(item['日期']) + '&nbsp;' + '<a href="' + item['链接'] + '" target="_blank">' + item['标题'] + '</a>' + '\n\n',
#                     unsafe_allow_html=True)

# 根据选项查找记录
if option == '标题含数字的新闻':
    result = find_records_with_numbers1_0.find_records_with_numbers("./news/")

    # 转换日期字段为datetime对象（假设日期格式为'YYYY-MM-DD'）
    for item in result:
        item['日期'] = datetime.strptime(str(item['日期']), '%Y%m%d')

    # 根据日期倒序排列记录
    result.sort(key=lambda x: x['日期'], reverse=True)

    # 展示结果数量
    st.write('共找到' + str(len(result)) + '条记录!')

    # 在Streamlit中展示每条记录
    for item in result:
        # 将日期转换回字符串格式进行展示
        display_date = item['日期'].strftime('%Y%m%d')
        st.markdown(f"{display_date}&nbsp;<a href=\"{item['链接']}\" target=\"_blank\">{item['标题']}</a>\n\n",
                    unsafe_allow_html=True)

if option =='新闻联播csv关键字查找':
    title = st.text_input('输入要查找的关键字：', '新质生产力')
    result= search_csv1_0.search_csv_files('./news/', title)
    if not result:
        st.write('未找到任何记录!')
    else:
        # 转换日期字段为datetime对象
        for i, item in enumerate(result):
            try:
                result[i][0] = datetime.strptime(item[0], '%Y%m%d')  # 将日期字符串转换为datetime对象
            except ValueError as e:
                # 如果日期格式不正确，打印错误信息并从列表中移除该条记录
                print(f"警告：记录 {i} 的日期格式不正确，将被跳过。错误信息：{e}")
                result.pop(i)
                i -= 1  # 调整索引以继续检查下一个元素

        # 根据日期倒序排列记录
        result.sort(key=lambda x: x[0], reverse=True)

        # 展示结果数量
        st.write('共找到' + str(len(result)) + '条记录!')

        # 在Streamlit中展示每条记录
        for item in result:
            display_date = item[0].strftime('%Y%m%d')
            st.markdown(f"{display_date}&nbsp;<a href=\"{item[2]}\" target=\"_blank\">{item[1]}</a>\n\n",
                        unsafe_allow_html=True)


# if option =='新闻联播csv关键字查找':
#     title = st.text_input('输入要查找的关键字：', '新质生产力')
#     result= search_csv1_0.search_csv_files('./news/', title)
#     # st.write('共找到'+str(len(result))+'条记录!')
#     if not result:
#         st.write('未找到任何记录!')
#     else:
#         # 转换日期字段为datetime对象（假设日期为item列表的第一个元素，且格式为'YYYY-MM-DD'）
#         for i, item in enumerate(result):
#             try:
#                 result[i][0] = datetime.strptime(item[0], '%Y%m%d')  # 将日期字符串转换为datetime对象
#             except ValueError:
#                 # 如果日期格式不正确，可以跳过该条记录或进行其他处理
#                 # 这里我们选择跳过，并通过打印信息来提醒用户
#                 print(f"警告：记录 {i} 的日期格式不正确，将被跳过。")
#                 result.pop(i)  # 从列表中移除该条记录
#                 i -= 1  # 调整索引以继续检查下一个元素
#
#         # 由于我们移除了某些记录，所以上面的枚举可能会导致索引错误。
#         # 但在这个特定情况下，由于我们已经处理完了所有记录，所以不需要再次遍历。
#         # 如果需要再次遍历，应该使用一个新的循环或重新计算索引。
#         # 然而，在这里我们只需要对剩下的记录进行排序。
#
#         # 根据日期倒序排列记录（现在日期是datetime对象）
#         result.sort(key=lambda x: x[0], reverse=True)
#
#         # 展示结果数量
#         st.write('共找到' + str(len(result)) + '条记录!')
#
#         # 在Streamlit中展示每条记录
#         # 假设item的结构为 [日期, 标题, 链接]
#         for item in result:
#             # 将日期转换回字符串格式进行展示（如果需要的话）
#             # 但由于我们已经在markdown中使用了HTML，并且不需要特定格式，所以可以直接使用datetime对象（它将被自动转换为字符串）
#             # 但为了清晰起见，我们还是将其转换为字符串格式，以便与原始代码保持一致
#             display_date = item[0].strftime('%Y%m%d')
#             st.markdown(f"{display_date}&nbsp;<a href=\"{item[2]}\" target=\"_blank\">{item[1]}</a>\n\n",
#                         unsafe_allow_html=True)
#     #item is list
#     # for item in result:
#     #     st.markdown(item[0]+'&nbsp;'+'<a href="' + item[2] + '" target="_blank">' +item[1] + '</a>' + '\n\n',unsafe_allow_html=True)


if option == '新闻联播省级名称出现次数':
    st.pyplot(province_counts1_0.provinces_counts())

if option == '新闻联播年度关键字出现次数':
    key = st.text_input('输入要查找的关键字：', '疫情')
    st.pyplot(key_counts1_0.key_counts(key))